package com.example.hello.controller;

import com.example.hello.common.PageResult;
import com.example.hello.common.Result;
import com.example.hello.entity.Dept;
import com.example.hello.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@Slf4j
public class DeptController {

    @Autowired
    private DeptService deptService;

    /**
     * 查询部门列表（支持分页与过滤）
     * @param name 部门名称（模糊匹配）
     * @param page 当前页码
     * @param pageSize 每页记录数
     * @return 部门列表结果
     */
    @GetMapping("/depts")
    public Result<PageResult<Dept>> getDeptList(
            @RequestParam(required = false) String name,
            @RequestParam(required = false) Integer page,
            @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
        try {
            log.info("接收到查询部门请求: name={}, page={}, pageSize={}", name, page, pageSize);
            PageResult<Dept> pageResult = deptService.getDeptList(name, page, pageSize);
            return Result.success(pageResult);
        } catch (Exception e) {
            log.error("查询部门列表失败", e);
            return Result.error("查询部门列表失败：" + e.getMessage());
        }
    }
    
    /**
     * 根据ID查询部门
     * @param id 部门ID
     * @return 部门信息
     */
    @GetMapping("/depts/{id}")
    public Result<Dept> getDeptById(@PathVariable Integer id) {
        Dept dept = deptService.getDeptById(id);
        if (dept != null) {
            return Result.success(dept);
        } else {
            return Result.error("部门不存在");
        }
    }
    
    /**
     * 添加部门
     * @param dept 部门信息
     * @return 添加结果
     */
    @PostMapping("/depts")
    public Result<Void> addDept(@RequestBody Dept dept) {
        // 参数校验
        if (dept.getName() == null || dept.getName().trim().length() < 2 || dept.getName().trim().length() > 10) {
            return Result.error("部门名称长度必须在2-10之间");
        }
        
        boolean success = deptService.addDept(dept);
        if (success) {
            return Result.success();
        } else {
            return Result.error("添加部门失败");
        }
    }
    
    /**
     * 修改部门
     * @param id 部门ID
     * @param dept 部门信息
     * @return 修改结果
     */
    @PutMapping("/depts/{id}")
    public Result<Void> updateDept(@PathVariable Integer id, @RequestBody Dept dept) {
        // 设置部门ID
        dept.setId(id);
        
        // 记录要更新的信息
        System.out.println("更新部门信息: ID=" + id + ", 部门信息=" + dept);
        
        boolean success = deptService.updateDept(dept);
        if (success) {
            // 查询更新后的部门信息进行验证
            Dept updatedDept = deptService.getDeptById(id);
            System.out.println("更新后的部门信息: " + updatedDept);
            return Result.success();
        } else {
            return Result.error("更新部门失败");
        }
    }
    
    /**
     * 删除部门
     * @param id 部门ID
     * @return 删除结果
     */
    @DeleteMapping("/depts/{id}")
    public Result<Void> deleteDept(@PathVariable Integer id) {
        boolean success = deptService.deleteDept(id);
        if (success) {
            return Result.success();
        } else {
            return Result.error("删除部门失败");
        }
    }
} 